package myFunc

import "fmt"

/*
匿名函数
*/
func AnonymousFunc() {
	// 不可重复调用的匿名函数
	res := func(n1 int, n2 int) int {
		return n1 + n2
	}(10, 20)
	fmt.Printf("res = %v\n", res)

	// 可重复调用的匿名函数
	a := func(n1 int, n2 int) int {
		return n1 + n2
	}
	res2 := a(10, 20)

	fmt.Printf("res2 = %v\n", res2)
	i := a(100, 200)
	fmt.Println("i = ", i)
}

/*
闭包。闭包返回一个函数，可以理解为，多次调用此函数时，对函数声明中的某个变量做了修改，后续的调用想
要延续之前调用后的修改值，所以闭包(避免改动被清除,正常调用某函数，前后多次调用变量会被重置初始化)。
*/
func AddUpper() func(int) int {
	var n int = 0
	return func(x int) int {
		n = n + x
		return n
	}
}
